Computing and storage devices are widely used business tools. Interfaces for providing access between computing and storage devices include Integrated Drive Electronics (“IDE”) and Small Computer System Interface (“SCSI”), among others. IDE is designed specifically for storage and the controller electronics are built into the disk drive. Consequently, IDE is a relatively economical option. While somewhat less economical, SCSI has greater capabilities than IDE. The original SCSI was a parallel interface capable of connecting multiple devices to a personal computer across multiple data lines. Further, SCSI device support was not limited to disk drives.
Some basic functionality and terminology of the original SCSI remain in current versions. Each device on a SCSI bus is assigned a unique Logical Unit Number (“LUN”) to distinguish between that device and other devices which share the same bus. SCSI devices that request I/O processes are called “initiators.” SCSI devices that perform operations requested by initiators are called “targets.” Each target can accommodate multiple devices, known as “logical units,” each of which is assigned a LUN. Commands that are sent to a SCSI controller identify devices based on their target and LUN.
Traditional IP storage platforms, such as EMC's Celerra platform, provide access to shared filesystems via industry standard Network Attached Storage (“NAS”) protocols such as Network File System (“NFS”) and Common Internet Filesystem (“CIFS”). NFS is a distributed filesystem which allows a computer to access files over a network. It is just one of many protocols built on the Open Network Computing Remote Procedure Call system (“ONC RPC”). CIFS is a standard remote file-system access protocol for use over the Internet. It enables groups of users to work together and share documents across the Internet or within corporate intranets. CIFS is an open, cross-platform technology based on the native file-sharing protocols built into Microsoft® Windows® and other popular PC operating systems, and supported on various other platforms. In addition to these protocols, many IP storage platforms also provide support for iSCSI targets. iSCSI is a protocol that encapsulates SCSI commands over/in TCP/IP.
When a network storage device implements an iSCSI LUN, a NAS filesystem (CIFS, NFS, etc.), A Fibre Channel LUN, or any other object as a file in another filesystem, significant data loss can be suffered when corruption occurs in the real (“container”) filesystem. The virtually provisioned volume resides in a file in the first container filesystem. For instance, on this volume may reside an iSCSI LUN, a FC LUN, a NAS filesystem, etc, and a second filesystem may reside on the virtually provisioned volume, i.e., a filesystem on a Volume on a File. Eventually, loss of consistency of the container filesystem can be expected to be caused by code error, a back-end error, a driver error, or some other reason. In response to detection of the loss of consistency of the container filesystem, a filesystem check (“fsck”) is performed to bring it back into consistency. While checking the filesystem, the checking algorithm will change block allocations. When files are found to be sharing blocks in a NAS filesystem, one file is given the block and the other file is truncated at the shared block. This is not generally a problem in a simple NAS filesystem because the corrupted files are reported as such, and the affect of the change only alters the specific files that were corrupted. However, in the case where the corrupted file is a Volume on a File or an iSCSI target, this behavior presents a problem because truncating a ‘file’ which is actually an iSCSI LUN or the volume of another filesystem causes the data to suddenly appear to the host to be missing without any forewarning. This is a data loss event. Conversely, the file “assigned” the shared block may not be consistent either. This type of data corruption is sometimes referred to as “silent corruption.” The typical response of simply ‘picking’ one of the files that share this block at random to be the block owner is unsatisfactory because of the probability of corrupting the data view of the LUN or virtual volume, even though it may fix the file level consistency.